package com.guchenbo.spark.core

import org.apache.spark.SparkContext

/**
 * @author guchenbo
 * @date 2022/3/4
 */
object RddDemo {

  def main(args: Array[String]): Unit = {
    val conf = SparkUtils.conf("word count")
    val sc = new SparkContext(conf)

    //    内存
    var rdd = sc.makeRDD(List(1, 2, 3, 4))
    rdd.collect().foreach(println(_))
    //    文件
    var lines = sc.textFile(path = "input/log4j.properties")
    lines.collect().foreach(println(_))

    //    分片设置
    //    numSlices 默认 defaultParallelism
    //   defaultParallelism = getOrElse(spark.default.parallelism，executor的cpu)，yarn模式最少为2
    rdd = sc.makeRDD(List(1, 2, 3, 4), 4)
    //    minPartitions 默认 min(defaultParallelism, 2)
    lines = sc.textFile(path = "input/log4j.properties", 2)
    //    用保存文件来演示分片
    rdd.saveAsTextFile("output/mem")
    lines.saveAsTextFile("output/file")

    //    分片算法
    //    内存
    //    ParallelCollectionPartition#slice#positions
    //    def positions(length: Long, numSlices: Int): Iterator[(Int, Int)] = {
    //      (0 until numSlices).iterator.map { i =>
    //        val start = ((i * length) / numSlices).toInt
    //        val end = (((i + 1) * length) / numSlices).toInt
    //        (start, end)
    //      }
    //    }
    //文件
    //   FileInputFormat#getSplits
  }
}
